<?php

class Application_Model_HistoItem {	//Champs toujours renseignés
	public $time=null;		//objet DateTime php (c'est penible sinon)
	public $montant=null;
	public $client=null;
	public $libelle=null;
	public $type=null;
	//Champs optionnels
	public $produit=null; //cf commentaire HistoVenteElement
	public $varstock=null;
	public $vendeur=null;
	public $groupe=null;

	public function Application_Model_HistoItem($client, $montant, $libelle,$time,$type,$vendeur=null,$groupe=null,$produit=null,$varstock=null)
	{
		if(!is_string($client)) {
			$this->client = $client;
		} else {
			$a = Application_Model_User::getByLogin($client);
			$this->client = $a;
		}

		if(isset($vendeur)) {
			if(!is_string($vendeur)) {
				$this->vendeur = $vendeur;
			} else {
				$a = Application_Model_User::getByLogin($vendeur);
				$this->vendeur = $a;
			}
		}
		if(isset($groupe)) {
			$this->groupe = $groupe;
		}

		$this->montant = $montant;
		$this->produit= $produit;
		$this->varstock=$varstock;
		$this->libelle = $libelle;
		$this->time=$time;
		$this->type=$type;


	}


	public function getTime()
	{
		return $this->time;
	}
	public function getClient()
	{
		return $this->client;
	}
	public function getMontant()
	{
		return $this->montant;
	}
	public function getLibelle()
	{
		return $this->libelle;
	}
	public function getProduit()
	{
		return $this->produit;
	}
	public function getVarstock()
	{
		return $this->varstock;
	}
	public function getVendeur()
	{
		return $this->vendeur;
	}

	public function printv($attrib)			//fonction générique d'impression d'un attribut, renvoie un string
	{
		switch($attrib)
		{
			case "time":
				echo $this->time->format("d/m/Y H:i:s");
				break;
			case "montant":
				echo $this->montant;
				break;
			case "client":
				echo $this->client->getLogin();
				break;
			case "libelle":
				echo $this->libelle;
				break;
			case "commentaire":
				echo $this->libelle;
				break;
			case "vendeur":
				if(isset($this->vendeur))
				{
					echo $this->vendeur->getLogin();
				}
				else
				{
					echo "N/A";
				}
				break;
			case "produit":
				if(isset($this->produit))
				{
					$prod=new Application_Model_Produit();
					try {
						$prod=$prod->getById($this->produit);
						echo ($prod->getName());
					}
					catch (Exception $e) {
						echo "produit inconnu";
					}
				}
				else {echo "N/A";}
				break;
			case "varstock":
				if(isset($this->varstock))
				{
					echo (- $this->varstock);
				}
				else
				{
					echo "N/A";
				}
				break;
			case "groupe":
				if(isset($this->groupe))
				{
					echo $this->groupe->getName();
				}
				else
				{
					echo "N/A";
				}
				break;

		}
	}

	private static function fromElement($elem)
	{
		$class = get_class($elem);
		$item =null;
		switch ($class)
		{
			case "Application_Model_HistoCarteElement":

				$item = new self($elem->getClient(), $elem->getMontant(), $elem->getCommentaire(), DateTime::createFromFormat('Y-m-d H:i:s', $elem->getTime()),'Carte');
				break;


			case "Application_Model_HistoVenteElement":

				$item =new self($elem->getClient(),$elem->getMontant(), $elem->getLibelle(), DateTime::createFromFormat('Y-m-d H:i:s', $elem->getTime()),'Vente', $elem->getVendeur(),$elem->getGroupe()->getName(), $elem->getProduit(), $elem->getStock());
				break;
		}
		return $item;
	}
	// Fonctions de tri//test




	//Fin des fonctions de tri

	public static function getAll($cat="all")				//Tous les élements, catégorie au choix(all, vente, carte), dans un tableau.
	{
		$rep=array();
		if($cat="all"||$cat="vente")
		{
			$r1=Application_Model_HistoVenteElement::getAll();
			foreach ($r1 as $r)
			{
				$item= self::fromElement($r);
				$rep[]=$item;
			}
		}
		if($cat="all"||$cat="carte")
		{
			$r2=Application_Model_HistoCarteElement::getAll();
			foreach ($r2 as $r)
			{
				$item=self::fromElement($r);
				$rep[]=$item;
			}
		}
		$rep;
	}

	public static function getByClient($client, $cat="all") //catégories possibles : "all" (défaut), "vente", ou "carte" uniquement
	{

		$rep=array();
		if($cat=="all"||$cat="vente")
		{
			$r1=Application_Model_HistoVenteElement::getByClient($client);
			foreach ($r1 as $r)
			{
				$item= self::fromElement($r);
				$rep[]=$item;
			}
		}
		if($cat=="all"||$cat="carte")
		{
			$r2=Application_Model_HistoCarteElement::getByClient($client);
			foreach ($r2 as $r)
			{
				$item=self::fromElement($r);
				$rep[]=$item;
			}
		}
		return $rep;
	}

	public static function getByGroup($groupe) 	//techniquement, on ne retourne alors que les élèments de l'historique des ventes (associées à un groupe)
	{
		$rep=array();
		$r1= Application_Model_HistoVenteElement::getByGroup($groupe);
		foreach($r1 as $r)
		{
			$item=self::fromElement($r);
			$rep[]=$item;
		}
		return $rep;
	}

	public static function getVFiltre($filtre)		//on passe dans un tableau les différents élèments du filtre.
	{
		$rep=array();

		$r1=Application_Model_HistoVenteElement::getFiltre($filtre);
		foreach ($r1 as $r)
		{
			$item= self::fromElement($r);
			$rep[]=$item;
		}

		return $rep;
	}

	public static function somme($arr)		//total des ventes sur le tableau fourni
	{
		$rep=0;
		foreach($arr as $a)
		{
			$rep=$rep+$a->montant;
		}

		return $rep;
	}

	public static function especes($tableau) //récupere le sous-tableau des paiements en espèce.
	{
		$rep=array();
		foreach($tableau as $tab)
		{
			if($tab->client->getLogin()=='vente_espèce')
			{
				$rep[]=$tab;
			}
		}
		return $rep;
	}

	public static function codebar($tableau) //récupere le sous-tableau des paiements en CB
	{
		$rep=array();
		foreach($tableau as $tab)
		{
			if($tab->client->getLogin()!='vente_espèce')
			{
				$rep[]=$tab;
			}
		}
		return $rep;
	}

}